package service;

/*
  @author 熊诗友
 * @since 2025/4/20 22:47
 */

import dto.RoleDto;
import dto.UserDto;
import s.Role;
import s.User;
import service.IRoleService;
import service.IUserService;
import vo.RoleVo;
import vo.Result;

public abstract class RoleService extends BaseService<Role, RoleDto, RoleVo> implements IRoleService {

    private IUserService userService;

    public static IRoleService singleton;

    private RoleService(){
        data = new Role[DATA_SIZE + 1];
        temp = new RoleVo[DATA_SIZE];
    }

    public static IRoleService getInstance(){
        if(singleton == null){
            singleton = new RoleService() {
                @Override
                User createEntity(UserDto dto, String id) {
                    return null;
                }
            };
        }
        return singleton;
    }

    @Override
    RoleVo convertToVo(Role role) {
        return new RoleVo(role.getId(), role.name, role.dataScope);
    }
    @Override
    Role createEntity(RoleDto dto, int id) {
        return new Role(id,dto.name, dto.dataScope);
    }

    @Override
    void updateEntity(RoleDto dto, Role role) {
        role.name  = dto.name;
        role.dataScope = dto.dataScope;
    }

    @Override
    public Result delete(int id){
        if(!existById(id)){
            return Result.failure("删除失败,不存在该数据");
        }
        if(userService == null){
            userService =UserService.getInstance();
        }
        if(userService.roleInUse(id)){
            return Result.failure("删除失败,还有用户具有该角色,不能删除");
        }
        data[id]=null;
        return Result.success("删除成功",null);
    }
}